home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1994 Michael Simmons.
- * All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose, without fee, and without written agreement is
- * hereby granted, provided that the above copyright notice and the following
- * two paragraphs appear in all copies of this software.
- *
- * IN NO EVENT SHALL MICHAEL SIMMONS BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
- * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF MICHAEL SIMMONS
- * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * THE MICHAEL SIMMONS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND MICHAEL SIMMONS HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- * I can be contacted via
- * Email: michael@ecel.uwa.edu.au
- * Post: P.O. Box 506, NEDLANDS WA 6009, AUSTRALIA
- *
- * Amigaversion by Tobias Seiler in 1997
- * Email: tabs@blader.com
- */
-
- /* MPEG Stream Constants */
-
- /* Start codes. */
-
- #define PICTURE_START_CODE 0x00000100
- #define SLICE_MIN_START_CODE 0x00000101
- #define SLICE_MAX_START_CODE 0x000001af
- #define RESERVED_START_CODE_1 0x000001b0
- #define RESERVED_START_CODE_2 0x000001b1
- #define USER_START_CODE 0x000001b2
- #define SEQ_START_CODE 0x000001b3
- #define EXT_START_CODE 0x000001b5
- #define RESERVED_START_CODE_3 0x000001b6
- #define SEQ_END_CODE 0x000001b7
- #define GOP_START_CODE 0x000001b8
- #define ISO_11172_END_CODE 0x000001b9
- #define PACK_START_CODE 0x000001ba
- #define SYSTEM_HEADER_START_CODE 0x000001bb
- #define RESERVED_STREAM 0x000001bc
- #define PRIVATE_STREAM_1 0x000001bd
- #define PADDING_STREAM 0x000001be
- #define PRIVATE_STREAM_2 0x000001bf
- #define AUDIO_STREAM_0 0x000001c0
- #define AUDIO_STREAM_31 0x000001df
- #define VIDIO_STREAM_0 0x000001e0
- #define VIDIO_STREAM_15 0x000001ef
- #define RESERVED_DATA_STREAM_0 0x000001f0
- #define RESERVED_DATA_STREAM_15 0x000001ff
-
- /* other stuff */
- #define MAX_NUM_STREAMS 43
-
- /* Picture_coding_type */
-
- #define I_TYPE 1
- #define P_TYPE 2
- #define B_TYPE 3
- #define D_TYPE 4
-
- /* Macros used with macroblock address decoding. */
-
- #define MB_STUFFING 34
- #define MB_ESCAPE 35
-
- /* Special values for DCT Coefficients */
- #define END_OF_BLOCK 62
- #define ESCAPE 61
-
- /* Audio */
-
- #define AUDIO_HEADER_SYNC 0xfff
-
- #define LAYER_I 3
- #define LAYER_II 2
- #define LAYER_III 1
- #define LAYER_RESERVED 0
-
- #define SAMPLE_FREQ_44 0
- #define SAMPLE_FREQ_48 1
- #define SAMPLE_FREQ_32 2
- #define SAMPLE_FREQ_RESERVED 3
-
- #define MODE_STEREO 0
- #define MODE_JOINT_STEREO 1
- #define MODE_DUAL_CHANNEL 2
- #define MODE_SINGLE_CHANNEL 3
-
- #define EMPHASIS_NONE 0
- #define EMPHASIS_50_15 1
- #define EMPHASIS_RESERVED 2
- #define EMPHASIS_CCITTJ17 3
-
- typedef struct {
- FILE *stream;
- unsigned int STD_scale; /* 1 bit */
- unsigned int STD_size; /* 13 bits */
- unsigned int PTS_hibit; /* 1 bit */
- unsigned int PTS; /* 32 bits */
- unsigned int DTS_hibit; /* 1 bit */
- unsigned int DTS; /* 32 bits */
- }
- StreamInfo;
-
- typedef struct {
- unsigned int SCR_hibit; /* 1 bit */
- unsigned int SCR; /* 32 bits */
- unsigned int mux_rate; /* 22 bits */
- }
- Pack_Header;
-
- typedef struct {
- unsigned int header_length; /* 16 bits */
- unsigned int rate_bound; /* 22 bits */
- unsigned int audio_bound; /* 6 bits */
- unsigned int fixed_flag; /* 1 bit */
- unsigned int CSPS_flag; /* 1 bit */
- unsigned int audio_lock_flag;/* 1 bit */
- unsigned int video_lock_flag;/* 1 bit */
- unsigned int video_bound; /* 5 bits */
- unsigned int reserved_byte; /* 8 bits */
- unsigned int STD_flag[MAX_NUM_STREAMS];
- unsigned int STD_scale_bound[MAX_NUM_STREAMS];
- unsigned int STD_size_bound[MAX_NUM_STREAMS];
- }
- System_Header;
-
- typedef struct {
- unsigned int stream_id; /* 8 bits */
- unsigned int packet_length; /* 16 bits */
- unsigned int STD_flag; /* 1 bit */
- unsigned int STD_scale; /* 1 bit */
- unsigned int STD_size; /* 13 bits */
- unsigned int PTS_Flag; /* 1 bit */
- unsigned int PTS_hibit; /* 1 bit */
- unsigned int PTS; /* 32 bits */
- unsigned int DTS_Flag; /* 1 bit */
- unsigned int DTS_hibit; /* 1 bit */
- unsigned int DTS; /* 32 bits */
- unsigned int buffer_size;
- char *buffer;
- }
- Packet;
-
-